基于 JDBC 开发

最近更新时间: 2024-06-12 15:06:00

JDBC 驱动包

可前往 官网 获取,或者向软件提供商获取。

驱动类

在代码中创建数据库连接之前,需要加载数据库驱动类“org.postgresql.Driver”。

连接参数

使用 JDBC 连接数据库,由 URL 指定具体连接的数据库,可采用以下的几种形式:

jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database

参数含义如下:

  • host:服务器的主机名。默认为 localhost,要指定 IPv6 地址,您必须将 host 参数括在方括号中,例如 Jdbc:postgresql:// 127.0.0.1:5740/accounting。

  • port:服务器正在监听的端口号。

  • database:数据库名称。

    除标准连接参数外,驱动程序还支持许多其他属性,这些属性可用于指定特定于其他驱动程序行为。这些属性可以在连接 URL 或附加 Properties 对象参数中指定 DriverManager.getConnection。

  • user:string 类型,表示创建连接的数据库用户。

  • password:string 类型,表示数据库用户的密码。

  • ssl:Boolean 类型,表示是否使用 SSL 连接。

  • loggerLevel:string 类型,为 LogStream 或 LogWriter 设置记录进 DriverManager 当前值的日志信息量。目前支持 OFF、DEBUG 和 TRACE。

    • 值为 DEBUG 时,表示只打印 DEBUG 级别以上的日志,将记录非常少的信息。

    • 值等于 TRACE 时,表示打印 DEBUG 和 TRACE 级别的日志,将产生详细的日志信息。默认值为 OFF,表示不打印日志。

  • prepareThreshold:integer类型,用于确定在转换为服务器端的预备语句之前,要求执行方法 PreparedStatement 的次数。缺省值是5。

  • batchMode:boolean 类型,用于确定是否使用 batch 模式连接。

  • Fetchsize:integer 类型,用于设置数据库链接所创建 statement 的默认 fetchsize。

  • ApplicationName:string 类型,应用名称,在不做设置时,缺省值为 PostgreSQL JDBC Driver。

  • allowReadOnly:boolean 类型,用于设置 connection 是否允许设置 readonly 模式,默认为 false,若该参数不被设置为 true,则执行 connnection.setReadOnly 不生效。

  • blobMode:string 类型,用于设置 setBinaryStream 方法为不同的数据类型赋值,设置为 on 时表示为 blob 数据类型赋值,设置为 off 时表示为 bytea 数据类型赋值,默认为 on。

  • connectionExtraInfo:boolean 类型,表示驱动是否上报当前驱动的部署路径、进程属主用户到数据库。

示例:

public static Connection GetConnection(String username, String passwd)
 {
   //驱动类
   String driver = "org.postgresql.Driver";
   //数据库连接描述符
   String sourceURL = "jdbc:postgresql://10.10.0.13:11345/tdapg";
   Connection conn = null;
     try
   {
     //加载驱动
     Class.forName(driver);
   }
   catch( Exception e )
   {
     e.printStackTrace();
     return null;
   }
   try
   {
      //创建连接
     conn = DriverManager.getConnection(sourceURL, username, passwd);
     System.out.println("Connection succeed!");
   }
   catch(Exception e)
   {
     e.printStackTrace();
     return null;
   }
   return conn;
};

示例代码

连接、建表、batch 插入、更新等 Java 连接 demo。

package Demo;
import java.sql.*;
public class tdapg_Conn {
public static Connection GetConnection(String username, String passwd) {
 String driver = "org.postgresql.Driver";
 String sourceURL = "jdbc:postgresql://100.1.1.1:11345/v3";
 Connection conn = null;
 try {
  Class.forName(driver).newInstance();
 } catch (Exception e) {
  e.printStackTrace();
  return null;
 }
 try {
  conn = DriverManager.getConnection(sourceURL, username, passwd);
  System.out.println("Connection succeed!");
 } catch (Exception e) {
  e.printStackTrace();
  return null;
 }
 return conn;
};
public static void CreateTable(Connection conn) {
 Statement stmt = null;
 try {
  stmt = conn.createStatement();
  int rc = stmt.executeUpdate("CREATE TABLE user_table(user_id INTEGER, user_name VARCHAR(32));");
  stmt.close();
  System.out.println("TABLE customer_t1 create Successful!");
 } catch (SQLException e) {
  if (stmt != null) {
   try {
    stmt.close();
   } catch (SQLException e1) {
    e1.printStackTrace();
   }
  }
  e.printStackTrace();
 }
}


public static void BatchInsertData(Connection conn) {
PreparedStatement pst = null;
try {
  pst = conn.prepareStatement("INSERT INTO user_table VALUES (?,?)");
  for (int i = 0; i < 3; i++) {
   pst.setInt(1, i);
   pst.setString(2, "data " + i);
   pst.addBatch();
  }
  pst.executeBatch();
   pst.close();
  System.out.println("Insert succeed!");


  } catch (SQLException e) {
  if (pst != null) {
   try {
    pst.close();
   } catch (SQLException e1) {
   e1.printStackTrace();
   }
  }
  e.printStackTrace();
 }
}
public static void ExecPreparedSQL(Connection conn) {
 PreparedStatement pstmt = null;
 try {
  pstmt = conn.prepareStatement("UPDATE user_table SET user_name = ? WHERE user_id = 1");
  pstmt.setString(1, "new Data");
  int rowcount = pstmt.executeUpdate();
  pstmt.close();
  System.out.println("Update succeed!");
 } catch (SQLException e) {
  if (pstmt != null) {
   try {
    pstmt.close();


    } catch (SQLException e1) {
    e1.printStackTrace();
   }
  }
  e.printStackTrace();
 }
}


public static void main(String[] args) {
 Connection conn = GetConnection("dbadmin", "tdapg@2021");
 CreateTable(conn);
 BatchInsertData(conn);
 ExecPreparedSQL(conn);
 try {
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
}

执行结果: